﻿using System.IO;
using Aptea.OpenXmlOffice;
using eCRAM.Model;
using eCRAM.Tools;

namespace eCRAM.Bll
{
    using System.Collections.Generic;

    /// <summary>
    /// Classe de génération d'un fichier Excel d'export des astreintes d'un cram
    /// </summary>
    public class AstreinteFileGenerator : CramExcelFileGenerator
    {
        
        /// <summary>
        /// Constructeur
        /// </summary>
        /// <param name="cram"></param>
        public AstreinteFileGenerator(Cram cram) : base(cram)
        {
            // Dans le cas des astreintes, on supprime les congés pour qu'ils n'apparaissent pas dans le doc généré
            foreach (var cramLine in new List<CramLine>(cram.CramLines))
            {
                if(cramLine.Activity.ActivityType.IsHoliday)
                {
                    cram.CramLines.Remove(cramLine);
                }
            }
        }

        /// <summary>
        /// Calcule le nom du fichier
        /// </summary>
        /// <param name="user"></param>
        /// <returns></returns>
        protected override string GetFileName(User user)
        {
            var anneeMois = Cram.Year + "-" + Cram.Month.ToString("00");
            var firstName = Cram.User.FirstName.ToLower().Capitalize();
            var lastName = Cram.User.LastName.ToUpperInvariant();

            return string.Format("{0} CRAM {1} {2} {3}.xlsx", anneeMois, firstName, lastName, "Astreintes");
        }

        /// <summary>
        /// Lance la génération du fichier
        /// </summary>
        public override void Generate()
        {
            if (!Directory.Exists(DestinationFolder))
            {
                Directory.CreateDirectory(DestinationFolder);
            }


            if (Cram == null || Cram.CramLines.Count <= 0) 
                return;
            

            FileName = Path.Combine(DestinationFolder, GetFileName(Cram.User));
               
            // Génération du cram Astreinte
            using (var excel = new ExcelManager(FileName))
            {
                new GraphAndSaveExcelFileGenerator
                    {
                        ExcelManager = excel,
                        Cram = Cram,
                        ProjectPredicate = item => item.Activity.IsAstreinte,
                        HolidayPredicate = item => false,// item.Activity.ActivityType.IsHoliday,
                    }
                    .Generate();

            }
        }
    }
}
